#ifndef _ICONFIGURE_H_
#define _ICONFIGURE_H_

#define configure_status       1000
#define configure_status_start policy_status + 10
#define configure_status_stop  policy_status + 20

interface IConfigureProc : public IBase
{
    std_method(OnPolicyEvent)(int type, BYTE* data, ULONG len) PURE;
    std_method(OnPolicyEventResult)(UINT status) PURE;
};

//{e9cef9e4-a28d-4ac5-99c5-a06d37d213de}
_DEF_IID(IID_IConfigureProc, 0xE9CEF9E4, 0xA28D, 0x4AC5, 0x99, 0xC5, 0xA0, 0x6D, 0x37, 0xD2, 0x13, 0xDE)

#define configure_name_len 32
#define configure_type_len 16

typedef enum _UPDATE_SOURCE {
    eUS_NONE = 0,
    eUS_TEMPLATE = 1,
    eUS_USM = 2,
    eUS_CLIENT = 3,
} UPDATE_SOURCE;

interface IConfigure : public IBase
{
    std_method(OnRegister)(LPCSTR name, LPCSTR type, IBase* pBase) PURE;
    std_method(OnUnRegister)(LPCSTR name, LPCSTR type) PURE;
    std_method(SetStorePath)(LPSTRING path) PURE;
    std_method_(LPSTRING, GetStorePath)() PURE;
    std_method(RefreshResource)(int nclass) PURE;
    std_method(GetResource)(int nclass) PURE;
    std_method(UpdateSource)(int source, int type, LPCSTR buf, int size) PURE;
    std_method(UpdateSource)(int source, int type, LPSTRING path) PURE;
};

//{736b6e66-93be-478b-bed4-e11fcd97ca83}
_DEF_IID(IID_IConfigure, 0x736B6E66, 0x93BE, 0x478B, 0xBE, 0xD4, 0xE1, 0x1F, 0xCD, 0x97, 0xCA, 0x83);

//{515b19ad-f72e-4baf-979f-d4f6310c15a6}
_DEF_CLSID(CLSID_CConfigure, 0x515B19AD, 0xF72E, 0x4BAF, 0x97, 0x9F, 0xD4, 0xF6, 0x31, 0x0C, 0x15, 0xA6);

#endif
